package com.audaque.springboot.foshanupload.core.util;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author zgb
 * @desc ...
 * @date 2022-11-04 15:50:19
 */
public class LockUtils {
    /**
     * 使用 ConcurrentHashMap 的 putIfAbsent 进行操作放入数据，
     * 因为 如果传入key对应的value已经存在，就返回存在的value，不进行替换。
     * 如果不存在，就添加key和value，返回null
     * 所以 putIfAbsent 使用的还是之前的数据，从而达到synchronized 锁住相同的数据
     */
    // 对其相同的ID进行加锁
    //一个业务一个容器

    public static class ApplyId {
        private static Map<Integer, Integer> applyIdLock = new ConcurrentHashMap<>();

        // 对其相同的ID进行加锁
        public static Integer lock(Integer applyId) {
            Integer i = applyIdLock.putIfAbsent(applyId, applyId);
            return i;
        }

        public static void unLock(Integer applyId) {
            applyIdLock.remove(applyId);
        }


    }



}

